File: EditorConfigSettings\Data\CodeStyleSetting`1.cs
Web Access
Project: src\src\EditorFeatures\Core\Microsoft.CodeAnalysis.EditorFeatures.csproj (Microsoft.CodeAnalysis.EditorFeatures)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System;
using Microsoft.CodeAnalysis.CodeStyle;
using Microsoft.CodeAnalysis.Editor.EditorConfigSettings.Updater;
using Microsoft.CodeAnalysis.Options;
using Roslyn.Utilities;
 
namespace Microsoft.CodeAnalysis.Editor.EditorConfigSettings.Data;
 
internal sealed class CodeStyleSetting<T> : CodeStyleSetting
    where T : notnull
{
    private readonly T[] _possibleValues;
    private readonly string[] _valueDescriptions;
 
    /// <summary>
    /// Stores the latest value of the option.
    /// </summary>
    private CodeStyleOption2<T> _value;
 
    public CodeStyleSetting(
        OptionKey2 optionKey,
        string description,
        OptionUpdater updater,
        SettingLocation location,
        CodeStyleOption2<T> initialValue,
        T[] possibleValues,
        string[] valueDescriptions)
        : base(optionKey, description, updater, location)
    {
        Contract.ThrowIfFalse(possibleValues.Length == valueDescriptions.Length);
 
        _value = initialValue;
        _possibleValues = possibleValues;
        _valueDescriptions = valueDescriptions;
    }
 
    public override Type Type
        => typeof(T);
 
    public override string[] GetValueDescriptions()
        => _valueDescriptions;
 
    public override string GetCurrentValueDescription()
        => _valueDescriptions[_possibleValues.IndexOf(_value.Value)];
 
    public override ICodeStyleOption2 GetCodeStyle()
        => _value;
 
    protected override object GetPossibleValue(int valueIndex)
        => _possibleValues[valueIndex];
 
    protected override object UpdateValue(object settingValue)
        => _value = (CodeStyleOption2<T>)settingValue;
}